\section{Il database}

Una definizione di database può essere {\bf il database rappresenta un archivio di dati strutturati}; la struttura più diffusa in questo momento è quella chiamata \emph{relazionale}, che si compone di tabelle e di relazioni tra di esse.

\subsection{Database Prolog}
Il database che si andrà ad interrogare attraverso il driver sviluppato avrà una struttura relazionale e sarà descritto attraverso una teoria prolog; le relazioni saranno espresse mediante l'uso di opportuni predicati. La tabella all'interno di questo database sarà rappresenta da un insieme di termini \emph{compound} prolog che rappresenteranno le righe della tabella; le righe avranno come sintassi:  
\begin{lstlisting}[language=Prolog]
 nomeTabella(col1,col2,......,colN).
\end{lstlisting}
I termini per appartenere ad una tabella dovranno avere come nome il nome della tabella. Esempio:
\begin{lstlisting}[language=Prolog]
 ta(col1,col2,col3).
 ta(col11,col21,col31).
\end{lstlisting}
questi due termini rappresentano due righe di una tabella;
\begin{lstlisting}[language=Prolog]
 ta(col1,col2,col3).
 tb(col1,col2,col3).
\end{lstlisting}
questi due termini rappresentano due righe di due tabelle rispettivamente ta e tb;
\begin{lstlisting}[language=Prolog]
 ta(col1,col2,col3).
 ta(col1,col2).
\end{lstlisting}
questi due termini rappresentano due righe della stessa tabella, il secondo è pero mancante di un campo, si suppone quindi che i campi mancanti siano settati a \emph{NULL};  inoltre da notare che si assume che i campi mancanti siano sempre nelle ultime colonne e non in mezzo in quanto quest'ultimo scenario non sarebbe predicibile. Per esprimere che una colonna è non settata basta usare il valore \emph{NULL} come valore, esempio : 
\begin{lstlisting}[language=Prolog]
 ta(col1,col2,col3).
 ta(col1,NULL,col2).
\end{lstlisting} 

\subsection{Il metabase}
Per avere la completezza di informazioni tipiche di un moderno database relazionale è necessario avere delle ulteriori informazioni su come è strutturato il database ed in particolare sulla struttura delle tabelle; queste informazioni solitamente compongono quello che è chiamato \emph{metabase} o \emph{metadatabase}. Un possibile insieme di informazioni utili possono essere : 
\begin{enumerate}
\item il nome da associare ad una colonna
\item il tipo di dato che contiene una colonna
\item la descrizione del contenuto di una colonna 
\end{enumerate}
questi sono solo alcuni possibili elementi. Nel nostro caso il \emph{metabase} può essere descritto attraverso l'uso di una tabella speciale dal nome {\bf metabase}; la sintassi sarà : 
\begin{lstlisting}[language=Prolog,showstringspaces=false]
 metabase(
	"nome tabella",
	"posizione della colonna tra gli argomenti",
	"nome della colonna",
	"tipo di dato contenuto",
	"descrizione"
 ).
\end{lstlisting}
Questa particolare tabella non è pero necessaria, il database sarà comuque consistente, ma la sua presenza facilita l'interazione dell'utente nello scrivere query sql. Un esempio :
\begin{lstlisting}[language=Prolog,showstringspaces=false]
 metabase("ta",1,"colonna1","string","prima colonna").
\end{lstlisting}
Permetterà all'utente di usare il nome della colonna nelle clausole sql.

\subsection{Tipi di dato}

\subsubsection{Dati primitivi}

Il database essendo scritto in prolog avrà come tipi di dati primitivi gli stessi supportati dal prolog;  la mappatura tra i tipi di dato primitivi Java , Prolog e quelli usati nel database è la seguente :

•Int, Long, Double, Floa

\begin{table}[Ht]
\caption{Mapping Java -  Prolog - Database }
\begin{center}
\begin{tabular}{c c c c c c c c}
\hline
Java & Prolog & Database \\
\hline
null & {\_} & {string(null)} \\
int & int & int or number\\
long & long & long or number\\
short & int & int or number\\
byte & int & int or number \\
double & double & double or number \\
float & float & float or number \\
boolean & NON PERVENUTO & string{(true,false)} \\
\hline
\end{tabular}
\end{center}
\end{table}%

\subsubsection{Strutture Dati}

Le strutture dati principali supportate saranno :
\begin{table}[Ht]
\caption{Database Structure - Prolog}
\begin{center}
\begin{tabular}{l c c c c c c c c}
\hline
  & Term & Struct & Var & Number & Atom & Atomic & Compound & List \\
\hline
0 & a1 & true & - & - & true & true & - & - \\
1 & 1 & - & - & true & - & true & - & - \\
2 & {[a,b]} & true & - & - & - & - & true & true \\
3 & p(a,b) & true & - & - & - & - & true & - \\
4 & {\_} & - & true & - & - & - & - & - \\
5 & A & -& true & - & - & - & - & - \\
\hline
\end{tabular}
\end{center}
\end{table}%
